package br.edu.fafica.especialidades.dao;

import java.util.List;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import br.edu.fafica.model.Especialidade;
 
public class JdbcEspecialidadeDAO implements EspecialidadeDAO {
	private Connection conexao;
	
	public JdbcEspecialidadeDAO(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conexao = DriverManager.getConnection("jdbc:mysql://localhost/db_projeto_mvc", "root", "");

			//conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_especialidade", "root", "");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
 
	@Override
	public void inserir(Especialidade especialidade) {
		
		String sql = "insert into tb_especialidade(especialidade) values (?)";
		PreparedStatement st;
		try {
			st = conexao.prepareStatement(sql);
			st.setString(1, especialidade.getEspecialidade());
			st.executeUpdate();
			st.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	@Override
	public void atualizar(Especialidade especialidade) {
		try {
			PreparedStatement ps = conexao.
					prepareStatement("UPDATE tb_especialidade SET especialidade = ? WHERE id = ?");
			ps.setString(1, especialidade.getEspecialidade());		
			ps.setInt(2, especialidade.getId());
			
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	@Override
	public void deletar(int id) {
		try {
			PreparedStatement ps = conexao.prepareStatement("DELETE FROM tb_especialidade WHERE id = ?");
			ps.setInt(1, id);
			
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	@Override
	public List<Especialidade> listarTodos() throws SQLException {
		List<Especialidade> especialidade = new ArrayList<Especialidade>();

		try {
			Statement stmt = conexao.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT * FROM tb_especialidade");
			
			while (rs.next()) {
				int id = rs.getInt("id");
				String nome = rs.getString("especialidade");
			
				Especialidade especialidade1 = new Especialidade();
				especialidade1.setId(id);
				especialidade1.setEspecialidade(nome);
				
				
				especialidade.add(especialidade1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return especialidade;
	}

	@Override
	public Especialidade buscarPorId(int id) {
		
		Especialidade especialidade = null;
		
		try {
			PreparedStatement ps = conexao.prepareStatement("SELECT * FROM tb_especialidade WHERE id = ?");
			ps.setInt(1, id);
			
			ResultSet rs = ps.executeQuery();

			if (rs.next()) {
				int idEspecialidades = rs.getInt("id");
				String nome = rs.getString("especialidade");
				
				
				especialidade = new Especialidade();
				especialidade.setId(idEspecialidades);
				especialidade.setEspecialidade(nome);
			
				//return especialidade;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return especialidade;
	}


	@Override
	public int countEspecialidade() {
		// TODO Auto-generated method stub
System.out.println("chamou");
		int resultado = 0;
		
		try {
			PreparedStatement ps = conexao.prepareStatement("SELECT COUNT(*) as COUNT FROM tb_especialidade;");
			
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				resultado = rs.getInt("COUNT");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return resultado;
	}
}
